#include "MallaControl.h"


MallaControl::MallaControl(unsigned int longCurvasControl) : 
	m_longCurvasControl(longCurvasControl)
{
}


MallaControl::~MallaControl() { }


void MallaControl::addCurvaControl( std::vector< glm::vec3 > vecVertices ) {
	if (vecVertices.size() != this->m_longCurvasControl){
		throw std::invalid_argument("La cantidad de puntos de control es incorrecta");
	}

	// Copia los puntos
	this->m_puntos.insert( this->m_puntos.end(), vecVertices.begin(), vecVertices.end() );
}


glm::vec3 MallaControl::get(unsigned int x, unsigned int y) const {
	// La posicion del punto buscado en el contenedor
	const unsigned int pos = x + y * this->m_longCurvasControl;

	if (pos > this->m_puntos.size()) throw std::range_error("El punto pedido esta fuera de rango");

	// Devuelve una copia
	return this->m_puntos[pos];
}

